#include "shm.hpp"
#include "fifo.hpp"

int main()
{
    key_t key = ftok(".", 0x11);
    std::cout << key << std::endl;
    int shmid = shmget(key, 4096, IPC_CREAT | IPC_EXCL | 0666);
    shmat(shmid, NULL, 0);

    shmid_ds ds;
    shmctl(shmid, IPC_STAT, &ds);
    std::cout << ds.shm_segsz << std::endl;
    std::cout << ds.shm_nattch << std::endl;
    std::cout << ds.shm_perm.__key << std::endl;

    return 0;
}


//int main()
//{
//    // 创建命名管道
//    fifo f;
//    f.CreatFifo();
//    f.OpenForRead();
//
//    // 共享内存
//    shm shm(DEFAULT_PATHNAME, DEFAULT_PROJ_ID, CREATOR);
//
//    char* buf = (char*)shm.GetAdder();
//    int cnt = 15;
//    while(cnt--)
//    {
//        // 读的时候，先读管道文件，看看有没有内容
//        // 有内容则表示client这一次已经写完了。
//        if(f.wait())
//        {
//            printf("client say->%s\n", buf);
//        }
//    }
//
//    f.Close();
//    return 0;
//};
//
// int main()
// {
//     // 1.生成key值
//     key_t key = ftok(".", 0x11);
//     if (key < 0)
//         perror("ftok");
//     printf("key:0x%x\n", key);
//
//     // 2.创建共享内存
//     int shmid = shmget(key, 4096, IPC_CREAT | IPC_EXCL | 0666);
//     if (shmid < 0)
//         perror("shmget");
//     printf("shmid:%d\n", shmid);
//
//     // 进程与共享内存关联
//     void *adder = shmat(shmid, NULL, 0);
//     if (adder == (void *)-1)
//         perror("shmat");
//     printf("adder:0x%p\n", adder);
//
//     sleep(2);
//
//     // 取关联
//     int n = shmdt(adder);
//     if(n < 0)
//         perror("shmdt");
//     std::cout << "shmdt success!" << std::endl;
//
//     sleep(2);
//
//     // 3.关闭共享内存
//     shmctl(shmid, IPC_RMID, NULL);
//
//     std::cout << "shmctl done!" << std::endl;
//     return 0;
// }